package models

import (
	"driver_srv/basic/config"
	"gorm.io/gorm"
	"time"
)

// 站点表
type Site struct {
	Id         int64          `gorm:"column:id;type:bigint;comment:站点ID;primaryKey;not null;" json:"id"`                                  // 站点ID
	RouteId    int64          `gorm:"column:route_id;type:bigint;comment:线路ID;not null;" json:"route_id"`                                 // 线路ID
	SiteCode   string         `gorm:"column:site_code;type:varchar(50);comment:站点编码;default:NULL;" json:"site_code"`                      // 站点编码
	SiteName   string         `gorm:"column:site_name;type:varchar(50);comment:站点名称;not null;" json:"site_name"`                          // 站点名称
	Longitude  float64        `gorm:"column:longitude;type:decimal(10, 6);comment:经度;default:NULL;" json:"longitude"`                     // 经度
	Latitude   float64        `gorm:"column:latitude;type:decimal(10, 6);comment:纬度;default:NULL;" json:"latitude"`                       // 纬度
	ArriveTime int            `gorm:"column:arrive_time;type:int;not null;comment:'到达时间'" json:"arrive_time"`                             // 到达时间
	CreatedAt  time.Time      `gorm:"column:created_at;type:datetime;comment:创建时间;not null;default:CURRENT_TIMESTAMP;" json:"created_at"` // 创建时间
	UpdatedAt  time.Time      `gorm:"column:updated_at;type:datetime;comment:更新时间;not null;default:CURRENT_TIMESTAMP;" json:"updated_at"` // 更新时间
	DeleteTime gorm.DeletedAt `gorm:"column:delete_time;type:datetime;comment:删除时间（软删除标记）;default:NULL;" json:"delete_time"`
}

func (s *Site) TableName() string {
	return "site"
}

// 创建站点
func (s *Site) CreateSite() error {
	return config.DB.Create(&s).Error
}

// 查询站点ID
func (s *Site) GetSiteId(siteId int64) error {
	return config.DB.Where("id = ?", siteId).Limit(1).Find(&s).Error
}

type SiteList struct {
	SiteName   string `json:"site_name"`
	ArriveTime int    `json:"arrive_time"`
	RouteName  string `json:"route_name"`
	RouteCode  string `json:"route_code"`
	StartPoint string `json:"start_point"`
	EndPoint   string `json:"end_point"`
}

// 查询站点列表
func (s *Site) ListSite() (listSite []*SiteList, err error) {
	err = config.DB.Table("site").
		Select("site.site_name,site.arrive_time,route.route_name,route.route_code,route.start_point,route.end_point").
		Joins("join route on site.route_id = route.id").
		Find(&listSite).Error
	if err != nil {
		return nil, err
	}
	return listSite, nil
}
